/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logica;


import fisica.AntecedenteHabitacionalFisica;
import fisica.CapaFisica;
import hibernate.objeto.Antecedente;
import hibernate.objeto.AntecedenteHabitacional;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
import java.util.Vector;

/**
 *
 * @author Gonzalo
 */
public class AntecedenteHabitacionalLogica extends CapaLogica {

    /**
     * Crea y persiste el objeto AntecedenteHabitacional.
     *
     * @param datosAntecedentesHabitacional Los datos correspondientes al apartado
     * Antecedentes Habitacional
     * @param antecedente El antecedente al cual se asocia
     * @return true si se agregó/modificó correctamente, false en caso contrario
     */
    public static boolean agregarAntecedenteHabitacional(
            String[] datosAntecedentesHabitacional, Antecedente antecedente) {
        if (seDebeCrearAntecedenteHabitacional(datosAntecedentesHabitacional)) {
            //Crea el objeto Antecedenete Habitacional
            AntecedenteHabitacional antecedenteHabitacional =
                    crearObjetoAntecedenteHabitacional(
                    datosAntecedentesHabitacional, antecedente);

            //Persiste el objeto
            CapaFisica.guardarOActualizarObjeto(antecedenteHabitacional);
            return true;
        } else {
            return true;
        }
    }

    /**
     * Crea un objeto AntecedenteHabitacional con los datos pasados por parámetro.
     *
     * @param datosAntecedentesHabitacional Los datos particulares del objeto
     * @param antecedente El antecedente al cual se asocia
     * @return El objeto AntecedenteHabitacional recien creado
     */
    private static AntecedenteHabitacional crearObjetoAntecedenteHabitacional(
            String[] datosAntecedentesHabitacional, Antecedente antecedente){

        AntecedenteHabitacional antecedenteHabitacional =
                new AntecedenteHabitacional();

        antecedenteHabitacional.setAntecedente(antecedente);

        antecedenteHabitacional.setFechaAntecedenteHabitacional(new Date());

        antecedenteHabitacional.setCohabitaConAntecedenteHabitacional(
                Integer.valueOf(datosAntecedentesHabitacional[
                ANTECEDENTE_HABITACIONAL_COHABITA_CON]));

        antecedenteHabitacional.setAmbientesTotalesAntecedenteHabitacional(
                Integer.valueOf(datosAntecedentesHabitacional[
                ANTECEDENTE_HABITACIONAL_AMBIENTES_TOTALES]));

        antecedenteHabitacional.setPisoDeAntecedenteHabitacional(
                datosAntecedentesHabitacional[ANTECEDENTE_HABITACIONAL_PISOS_DE]);

        antecedenteHabitacional.setParedDeAntecedenteHabitacional(
                datosAntecedentesHabitacional[ANTECEDENTE_HABITACIONAL_PAREDES_DE]);
        
        antecedenteHabitacional.setTechoDeAntecedenteHabitacional(
                datosAntecedentesHabitacional[ANTECEDENTE_HABITACIONAL_TECHOS_DE]);

        antecedenteHabitacional.setAguaCorrienteAntecedenteHabitacional(
                datosAntecedentesHabitacional[ANTECEDENTE_HABITACIONAL_AGUA_CORRIENTE]);

        antecedenteHabitacional.setElectricidadAntecedenteHabitacional(
                datosAntecedentesHabitacional[ANTECEDENTE_HABITACIONAL_ELECTRICIDAD]);

        antecedenteHabitacional.setCloacasAntecedenteHabitacional(
                datosAntecedentesHabitacional[ANTECEDENTE_HABITACIONAL_CLOACAS]);

        antecedenteHabitacional.setMascotasAntecedenteHabitacional(
                datosAntecedentesHabitacional[ANTECEDENTE_HABITACIONAL_MASCOTAS]);

        antecedenteHabitacional.setCucarachasAntecedenteHabitacional(
                datosAntecedentesHabitacional[ANTECEDENTE_HABITACIONAL_CUCARACHAS]);

        antecedenteHabitacional.setChagasAntecedenteHabitacional(
                datosAntecedentesHabitacional[ANTECEDENTE_HABITACIONAL_CHAGAS]);

        return antecedenteHabitacional;
    }

    /**
     * Cheque si los datos son nulos.
     *
     * @param datosAntecedentesHabitacional Los datos a agregar
     * @return true si se debe crear el objeto AntecedenteHabitacional, false
     * en caso contrario
     */
    private static boolean seDebeCrearAntecedenteHabitacional(String[]
            datosAntecedentesHabitacional) {
        String[] datosAntecedentesHabitacionalVacio = {"0", "0", "", "", "", "",
                                                    "", "", "", "", ""};

        for (int i = 0; i < datosAntecedentesHabitacionalVacio.length; i++) {
            if (!datosAntecedentesHabitacional[i].equals(
                    datosAntecedentesHabitacionalVacio[i])) {
                return true;
            }
        }

        return false;
    }

    /**
     * Retorna el vector de objetos AntecedenteHabitacional según el id del paciente
     * ordenado decrecientemente por la fecha.
     *
     * @param idPaciente El id del paciente consultado
     * @return El vector de objetos AntecedenteHabitacional consultado, null si no
     * existe
     */
    public static Vector<AntecedenteHabitacional>
            getVectorAntecedenteHabitacionalPorIdPaciente(int idPaciente) {
        Vector<AntecedenteHabitacional> vectorAntecedenteHabitacional =
                AntecedenteHabitacionalFisica.getVectorAntecedenteHabitacionalPorIdPaciente(
                idPaciente);
        if (vectorAntecedenteHabitacional != null) {
            Collections.reverse(vectorAntecedenteHabitacional);
        }

        return vectorAntecedenteHabitacional;
    }

    /**
     * Retorna el último antecedente habitacional cargado del paciente.
     *
     * @param idAntecedente El id del antecedente asociado
     * @return El objeto AntecedenteHabitacional consultado, null si no existe
     */
    public static AntecedenteHabitacional
            getAntecedenteHabitacionalMasRecientePorIdAntecedente(
            int idAntecedente) {
        Vector<AntecedenteHabitacional> antecedenteHabitacional =
                AntecedenteHabitacionalFisica.
                getVectorAntecedenteHabitacionalPorIdAntecedente(idAntecedente);

        if (antecedenteHabitacional != null) {
            return antecedenteHabitacional.lastElement();
        } else {
            return null;
        }
    }

    /**
     * Retorna un arreglo de strings con las fechas de los objetos del vector.
     *
     * @param vectorAntecedenteHabitacional El vector de objetos AntecedenteHabitacional
     * @return Un arreglo de strings con las fechas de los antecedentes
     */
    public static String[] getListaDeFechaAntecedenteHabitacional(
            Vector<AntecedenteHabitacional> vectorAntecedenteHabitacional) {
        // El ComboBox necesita para ser cargado un arreglo de strings, por lo
        // que se crea
        String[] arregloStringAntecedenteHabitacional = vectorAArregloString(
                vectorAntecedenteHabitacional);

        return arregloStringAntecedenteHabitacional;
    }

    /**
     * Convierte un vector de AntecedenteHabitacional en un arreglo de las fechas
     * de los objetos.
     *
     * @param vectorAntecedenteHabitacional El vector de objetos AntecedenteHabitacional
     * @return La lista resultante cargada
     */
    private static String[] vectorAArregloString(
            Vector<AntecedenteHabitacional> vectorAntecedenteHabitacional) {

        int tamaño = vectorAntecedenteHabitacional.size() + 1;
        String[] arregloStringModificado = new String[tamaño];

        String primerElemento = "";

        arregloStringModificado[0] = primerElemento;
        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
        String formattedDate;

        for (int i = 0; i < vectorAntecedenteHabitacional.size(); i++){
            formattedDate = formatter.format(vectorAntecedenteHabitacional.get(i).
                    getFechaAntecedenteHabitacional());
            arregloStringModificado[i+1] = "Nº " + i + ": " + formattedDate;
        }

        return arregloStringModificado;
    }

}
